package com.itheima.test5;

import java.io.*;

/**
 * @Author:gy
 * @Date: 2025/08/28 15:43
 * @Description:
 */
public class Demo1 {
    public static void main(String[] args) {
           //拷贝一个文件夹  将文件夹先关联到文件类
        //源文件
        File src = new File("D:\\班级\\93期\\day10-IO\\测试");
        //目的地
        File desc = new File("D:\\班级\\93期\\day11-IO");
        //用递归  拷贝文件夹
        copyFolders(src,desc);
    }
    //拷贝文件夹的方法
    private static void copyFolders(File src, File desc) {
        //在目标文件夹下面创建一个和源文件夹一模一样的名字
        String name = src.getName();//源文件夹的名字
        File parent = new File(desc, name);
        if (!parent.exists()) {
            parent.mkdirs();
        }
        //遍历源文件夹 得到所有的子文件
        File[] files = src.listFiles();
        for (File file : files) {
            //判断当前源文件夹下面的子文件是文件夹还是文件
            if(file.isDirectory()){
                //如果是文件夹 直接调用复制文件夹的方法就可以了  源文件  file   目的地文件 parent
                copyFolders(file,parent);
            }else{
                //不是文件夹 是文件  直接拷贝  源文件  file   和目标文件  parent\\文件名字.txt
                File dest_file = new File(parent,file.getName());
                copyFile(file,dest_file);
            }
        }
    }

    private static void copyFile(File file, File destFile)  {
        //文件的拷贝  读写的缓冲流
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            //字节缓冲输入流  读
            bis = new BufferedInputStream(new FileInputStream(file));
            //字节缓冲输出流  写
            bos = new BufferedOutputStream(new FileOutputStream(destFile));
            //读写一个数组
            byte[] bytes = new byte[1024];
            int len;
            while ((len = bis.read(bytes)) != -1) {
                bos.write(bytes, 0, len);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(bis != null){
                try {
                    bis.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(bos != null){
                try {
                    bos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}
